/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package controllers;

import entities.Camera;
import entities.Volo;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author riccardo
 */
@Stateless
public class VoloFacade extends AbstractFacade<Volo> {

    @PersistenceContext(unitName = "WebApplication2PU")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public VoloFacade() {
        super(Volo.class);
    }
    
    @Override
    public void edit(Volo entity) {
        entity.setIdVOLO(entity.getElemento().getIdELEMENTO());
        getEntityManager().merge(entity);
    }
//
//    public List<Volo> findFiltered(String idViaggio) {
//        List<Volo> retVal = null;
//
//        System.out.println("idViaggio= "+idViaggio);
//        
///* devo implementare la seguente query
//select volo.* 
//from composizione inner join elemento
//on elemento.idELEMENTO = composizione.idElemento
//inner join volo
//on volo.idVOLO = elemento.idELEMENTO
//where idViaggio=?
//        
//fare attenzione ad usare gli esatti nomi dei campi delle entities        
//*/        
//        String jql="SELECT v FROM Composizione c INNER JOIN Fetch c.idElemento e "
//                        + "INNER JOIN fetch e.volo v where (c.idViaggio.idVIAGGIO=:idViaggio)";
//        Query query =  getEntityManager().createQuery(jql);
//        query.setParameter("idViaggio",Integer.parseInt(idViaggio));
//        retVal = query.getResultList();
//        return retVal;
//    }

    public List<Volo> findByIdViaggio(int parseInt) {

//        Select Camera.*
//        From Composizione join Elemento on idElemento= idElemento
//                join Camera on idElemento=idCamera
//        where composizione.idViaggio = ?
        String jql="SELECT v FROM Composizione c INNER JOIN Fetch c.idElemento e "
                        + "INNER JOIN fetch e.volo v where (c.idViaggio.idVIAGGIO=:idViaggio)";        
        Query q = getEntityManager().createQuery(jql);
        q.setParameter("idViaggio", parseInt);
        return q.getResultList();        }

    public List<Volo> findByIdPackage(int parseInt) {           

        String jql = "SELECT v FROM Composizionepacchetto c INNER JOIN Fetch c.idElemento e " 
                        + "INNER JOIN fetch e.volo v where (c.idPacchetto.idPACCHETTO=:idViaggio)";
        Query q = getEntityManager().createQuery(jql);
        q.setParameter("idViaggio", parseInt);
        return q.getResultList();    
    }
}
